# Author : Lzhiyu
# 时间 : 2021/10/10 9:10
# 项目名称 : week06作业
# Software: PyCharm

stu_id = [10001,10002,10003,10001,10010,10090,10091,10010,10001]
names = ["zhiyu","yujie","lijie","zhanjie"]

# 列表的私有方法

# 1.增加的方法
## 1.1 增加 append()  增加在list的末尾
names.append("linlin")
print(names)

## 1.2 插入 insert() 可以指定位置增加元素
    ## insert：取一个索引值和一个对象作为参数
names.insert(1,"lanj")
print("insert之后的names：",names)

# 2. 删除 remove  和 pop
## 优势：如果删除list中多个元素时，remove比较合适
"""
Remove first occurrence of value.
Raises ValueError if the value is not present.
"""
# remove只能删除第一个，无法删除列表中多个重复的东西

## 2.1 remove()一般情况下 使用remove先用in做判断
    ## remove:取一个对象值作为唯一参数（删除的不是索引值，而是值）
# if 10001 in stu_id:
#     stu_id.remove(10001)
# print("remove删除后的stu_id：",stu_id)

## 2.2 pop() 删除位置为1的这个元素
    ## pop：取一个可选的索引值作为参数
names.pop(-1)
print("pop方法删除后的names",names)

## 3. index()索引 查看该元素如10001 在stu_id中第一个出现的位置索引
print(stu_id.index(10091))

## 4. clear()清除所有数据
names.clear()
print("清除names列表后的值：",names)

## 5.count()查看列表元素出现的个数，（简单应用）统计分数出现的次数
print("count方法的结果：",stu_id.count(10001))

## 6. extend() 是给指定的list进行扩充
    ## extend：取一个对象列表作为唯一参数
names.extend(stu_id)
print(names)

## 作业： list方法的总结，list的切片的总结
'''
笔记：
列表总结
    1.列表总是用中括号[]包围，且列表中包含的对象之间总是用逗号,分隔
    2.列表中0代表第一个字符/第一个[]/、1代表第二个，以此类推。（# 列表是有顺序的一组值，顺序是从 0 位置开始的）
        eg：0,1,2,3
        * 当取值为负数时，则从右往左取值
    3.切片slice：
        * 右边的值取不到 例如[0:3] 索引为3的值取不到 
            值为负数时，例如[-3:-1]。索引为-1取不到
        * 0作为值时，可以忽略不写 例如[:6]
        * 如果要取到最后一个值，不能写0，直接省略不写
            eg：- 如果取值为空：说明slice写错了 例如[-3:0]
                - [:]、[-3:]
        * print(user_data_list[3:1])  
          print(user_data_list[-1:1])
          print(user_data_list[-1:-3])
            这种情况为错误（个人理解：左边的必须在左边，右边同）
    4.步长[start:stop:step]
'''
# 列表的其他方法(Sequence Types 的一些方法)
## 1. len()查看list长度
print("names的长度/names的列表元素个数：",len(names))

## 2. in 查看元素是否存在list当中,结果为布尔值，False/True,
##    一般在操作list的修改和删除时会先判断
print("zhiyu" in names)

# 1. copy()很重要
# 思考，赋值是真正的复制么？ 赋值(=) <=> copy? 不等价
stu_id_copydata = stu_id
print("stu_id:",stu_id,"\n","stu_id_copydata:",stu_id_copydata)

# 实验1 赋值
stu_id.pop(1)
print("stu_id:",stu_id,'\n','stu_id_copydata:',stu_id_copydata)

# 实验2 copy()
stu_id_matedata = stu_id.copy()
stu_id.pop(1)
print("stu_id:",stu_id,'\n','stu_id_matedata:',stu_id_matedata)

# # 实验3 切片实现复制
stu_id_matedata = stu_id[:]
stu_id.pop(1)
print("stu_id:",stu_id,'\n','stu_id[:]:',stu_id_copydata)

# 思考，如何取出所有位置10001的index？
for i in stu_id:
    #  循环遍历stu_id的所有内容
    if i == 10001:
        # 判断如果元素为10001的时候，怎么取出索引值？
        print()

# 枚举:因为list其实不仅有values值，还有index索引，但for循环主要循环遍历其值，不遍历索引
# 因此，有了枚举的方法，同时遍历两者
# enumerate()
pop_values_list = []  # append方法经常用于新建列表
for index,item in enumerate(stu_id):
    # print(index,item)
    if item == 10001:
        print(index,item)
        pop_values_list.append(index)
print("我们想要删除pop()的值：",pop_values_list)